<?php
/**
 * 这个案例有种脱裤子放屁多此一举
 */

// 现有的短信类-实现类
class Message
{
	public function send()
	{
		return '现有的 服务商A Message->send()';
	}
	public function push()
	{
		return '现有的 服务商A Message->push()';
	}
}
// 现有短信类的使用方式
$message = new Message();
echo $message->send() . PHP_EOL;
echo $message->push() . PHP_EOL;

echo '--------------------------' . PHP_EOL;

// 改造成支持多个服务商的短信类
// 	原服务商A改造
class MsgServerASdk 
{
	public function sendA()
	{
		echo '改造后 服务商A MsgServerASdk->sendA()' . PHP_EOL;
	}

	public function pushA()
	{
		echo '改造后 服务商A MsgServerASdk->pushA()' . PHP_EOL;
	}
}
class MsgServerAAdapter extends Message
{
	private $sdk;

    public function __construct($sdk){
        $this->sdk = $sdk;
    }

	public function send()
	{
		$this->sdk->sendA();
	}
	public function push()
	{
		$this->sdk->pushA();
	}
}
// 	新增服务商B
class MsgServerBSdk 
{
	public function sendB()
	{
		echo '改造后 服务商B MsgServerBSdk->sendB()' . PHP_EOL;
	}

	public function pushB()
	{
		echo '改造后 服务商B MsgServerBSdk->pushB()' . PHP_EOL;
	}
}
class MsgServerBAdapter extends Message
{
	private $sdk;

    public function __construct($sdk){
        $this->sdk = $sdk;
    }

	public function send()
	{
		$this->sdk->sendB();
	}
	public function push()
	{
		$this->sdk->pushB();
	}
}
// 改造后的使用方式
$msgA = new MsgServerAAdapter(new MsgServerASdk);
$msgA->send();
$msgA->push();

$msgB = new MsgServerBAdapter(new MsgServerBSdk);
$msgB->send();
$msgB->push();

